It can be easily observed that the number of technologies involved in business application development has been constantly and dramatically increased from the earlier monolithic applications to today's service oriented architectures. For example, IBM's technology stack (FIG. 1) increased from about 6 technologies used in the days of structured programming architectures (110) to about 15 for 3-tier client-server architectures (120) to more than 30 in the modern service-oriented architectures (130). As seen in FIG. 2, more than 30 technologies can also be counted in Microsoft's technology stack used in the development of service-oriented applications. Similar complexity can also be observed in the technology stack used in the Zend Framework, as illustrated in FIG. 15, which framework is an open source modern framework whose purpose is to simplify and speed up the development of web and mobile applications.
This dramatic increase in the number of technologies involved in the business application development has compounding negative effects, which include but are not limited to the following: the skillset required for developing today's business applications can't be found in a single individual but rather in a growing team of expensive resources specialized in many areas of technology; only large development groups and companies can afford to maintain the required pools of resources; the development is moving away even from the large enterprises and getting closer to the technology developers to keep up with ever evolving technologies; and the separation of the business analyses skill, which is within the enterprise, from the development skill, which is largely outsourced to a technology provider, results in longer response times for delivering new applications, enhancement and fixes and longer time to market of new products.
Layered application architecture refers to logical separation of application code that performs different functions, such as business logic, presentation, data storage and retrieval etc. Layering introduces independence between functionally different application areas and makes it easier to code and change one of the layers without affecting the entire application.
Tiered application architecture refers to the physical separation of one or more application layers and the capability of running those as separate entities in possibly different computer hardware. This physical separation introduces advantages for security, performance, scalability etc.
Service oriented architecture refers to constructing the application using service providers and service consumers that interact to each other via standard and platform independent interfaces. The service providers can be internally of any design, including layered and tiered architectures. They hide their implementation from the rest of the world and just advertise the services they provide and how to use them.
While today's most trendy architecture is service oriented, the service providers or consumers are constructed as layered or tiered applications using a variety of technologies and typically using object-oriented programming. Each application tier is coded using building blocks that are specialized for the particular tier. With illustrative reference to FIG. 3, these building blocks can represent data 362, 364 or business logic 360 and generally have a life span within their application tier. In order for a tiered application to function, the data is translated from one form to another and transported between different tiers using a variety of interfaces, i.e. respective interfaces 370, 372, 374 and 376. For instance the database tier 340 uses relational tables 362 or XML structures 364 to store data, whereas the business logic tier 330 uses objects 360 or object collections. The data from the database 340 are retrieved using SQL 372 or XQuery 374 commands, and passed to an object 360 in the logic layer 330 using for instance an ODBC interface. In another situation the presentation layer 320 retrieves the data from its own objects (356, 358) and uses serialization 354 to represent them to a web service client 310 using a web service interface 370. The web service client de-serializes the data and represents them as a different type of object 350 that in turn is used to populate the properties of a control object 352 that will show these data in the computer screen. The same situation applies for coding the processing logic. In the database tier, the SQL query language can be used, whereas the XQuery or PL/SQL language can be used to process the data. In the business logic, an object oriented or structured language like C++, C#, COBOL, etc., is typically used. In the presentation layer, a combination of object-oriented, scripted or hypertext languages can be used that operate on the tier specific data objects to implement the processing logic. Accordingly, models of this type can be readily characterized as supporting tierful coding.
With reference to FIG. 5, applications typically have a direct dependency on the technology used to develop them. In an enterprise application you can easily count 20-30 applicable technologies and growing. Every time a technology layer changes (510) every company that is using this technology must absorb that change by executing a corresponding update 520 to related applications 530. This results in huge number of changes in global scale that can affect hundreds or thousands of companies and thousands or millions of applications. An enterprise that does not propagate the technology change to its applications will be missing the new features and technology advances or security updates; the unchanged applications will be outdated and out of support.
Enterprise applications depend not only on the underlying technologies but also on application architectures that also change and become obsolete over years. The client-server architecture that was a modern one 10-15 years ago today is considered inferior against service oriented applications, for example.
The worst-case scenario is when the underlying technology becomes obsolete. In this case the enterprise faces the challenge of migrating the application to another technology, which is an expensive project that often results in re-engineering and re-writing the entire application or abandoning it and purchasing a new one. The data migration can also become a costly exercise.
In an enterprise environment, a variety of technology providers can typically be found for hardware (HW), operating systems (OS), application servers, databases, etc. Known server systems include MS Windows servers, UNIX servers, AS/400, mainframe, etc., whereas known database systems include MS SQL Servers, Oracle, IBM DB2, etc. Generally, the enterprise must face the cost of maintaining the different hardware infrastructures in datacenters, the cost of licenses of different software products that serve the same purpose and the cost of resources specialized in all these technologies. The enterprise's goal is to consolidate the technology providers, hardware platforms, databases and other middleware software. However, a major problem for consolidation subsists where certain required or desired applications are dependent on one technology or another and thus cannot readily be ported from one platform to another.
Coding for Business can be defined as the shortest form of statement or expression that describes the business function. For instance:                display picture x in the screen;        perform transaction T using user input I and account A;        store and display the balance B.        
In comparison, Coding for Technology can be defined as technology instructions that are needed to implement the described business function. For instance:
- code for web service, i.e.: WS2007HttpBinding binding = new WS2007HttpBinding( ); EndpointAddress address = new EndpointAddress(m_address); ChannelFactory1 = new ChannelFactory<HiLDDE.IHiLDDE>(binding,  address); Channel1 = HiChannelFactroy.CreateChannel( ); - code for user interface, i.e: public delegate void PickEventHandler(object sender, CustomSelect CustSelectObject); //Event public event PickEventHandler Pick; // Raise event protected virtual void RaiseEvent_Pick(CustomSelect CustSelectObject) {  if (Pick != null)   Pick(this, CustSelectObjec); }- code for database, i.e: // declare cursor EXEC SQL DECLARE cursor1 CURSOR FOR <select statement> // open cursor EXEC SQL OPEN cursor1; // fetch data EXEC SQL FETCH cursor1 INTO <host variables list> // close cursor EXEC SQL CLOSE cursor1;
Coding for business is in a language that is understood by a business analyst. Coding for technology is not understandable by a business analyst, it can only be understood by a developer. In typical applications the majority of coding goes towards the technology that is used to implement certain business function. The larger the amount of coding for technology for the same business function the lower the productivity.
A productivity indicator can be based on, for example, the number of code lines per business function, the time spent for coding per business function, and/or the cost of coding per business function, to assess the productivity of a programming model or platform versus another.
This background information is provided to reveal information believed by the applicant to be of possible relevance. No admission is necessarily intended, nor should be construed, that any of the preceding information constitutes prior art.